Architectural Blueprint & Engine Design
This document provides a deep architectural analysis of Void-Builder, detailing component responsibilities, class hierarchies, data flows, sequence diagrams, and pipeline execution stages.
1. Architectural Principles
Void-Builder is built around four core design principles:
Separation of Concerns: Configuration parsing (
config_loader), host tools (toolchain), environment execution (chroot_manager), image generation (iso_engine), and rootfs configuration (customizer) are decoupled into specialized modules.Total Build Isolation: No host package manager or host package installation is required.
ToolchainManagerautomatically downloads staticxbps-install.staticandprootbinaries intovoid_builder/tools/for zero-host-dependency execution across any Linux distribution.Abstract Engine Registry: Architecture engines (
VoidEngine,PlatformEngine) register via@ISOEngine.register("name")decorators, allowing new hardware platforms to be added without modifying existing code.Dual Execution Modes: High-speed
--mode mocknon-root simulation alongside production--mode realroot operations.Resilient Workdir Fallbacks: Automated permission testing for workspace directories, falling back to
/tmp/void-builder-fallbackand/tmp/void-builder-cacheif project root permissions are restricted.
2. Complete Execution Sequence Diagram
User / Terminal
|
| 1. Execute cli.py [arch] [options]
v
cli.py
|
| 2. Instantiate BuildOrchestrator
v
BuildOrchestrator
|
| 3. ConfigAssembler.assemble()
v
ConfigAssembler ===> Reads global_build.json + architectures/ + desktops/ + package_rules.json
|
| 4. Return Config object
v
BuildOrchestrator
|
| 5. ToolchainManager.setup() -> Ensure static xbps binaries
| 6. ChrootManager(chroot_path)
| 7. ISOBuilder(arch, config, toolchain)
v
ISOBuilder
|
| 8. Select engine: VoidEngine or PlatformEngine
v
Target Engine (VoidEngine / PlatformEngine)
|
+---> 1. setup_workdir()
|
+---> 2. setup_chroot()
|
+---> 3. install_packages() -> ChrootManager.install_packages()
|
+---> 4. post_install_configure() -> SystemConfigurator.apply()
|
+---> 5. build_bootloaders() -> SYSLINUX / GRUB / U-Boot
|
+---> 6. finalize_isofile() / export_tarball() -> mksquashfs / xorriso / sfdisk / tar
|
+---> 7. _generate_manifest_and_checksums() -> .sha256, .md5, .manifest.json
v
Output Artifacts (.iso / .img / .tar.xz + Manifests)
3. Class Hierarchy & Responsibilities
Module: void_builder.core.config_loader
Config
Role: Read-only configuration wrapper providing dot-notation access (
cfg.get("system.iso_label")).
ConfigAssembler
Role: Recursive dictionary merger.
Methods:
_deep_merge(base, update): Combines nested dicts and appends list items uniquely.assemble(...): Merges global build settings, architecture config, desktop profile, kernel override, package profiles, service profiles, and dynamic package rules.validate(...): Validates that all requested profile files exist inconfigs/and produces a structured audit dictionary.
ConfigLoader
Role: Backward-compatible loader helper.
Module: void_builder.core.toolchain
ToolchainManager
Role: Downloads and validates static
xbps-install.staticandxbps-rindex.staticbinaries.Methods:
setup(): Verifies host static tools or downloads pre-compiled static binaries intovoid_builder/tools._run_xbps_install(...): Executes staticxbps-install.staticagainst the target rootfs.
Module: void_builder.core.chroot_manager
ChrootManager
Role: Handles pseudo-filesystem mounts (
/proc,/sys,/dev,/dev/pts,/dev/shm), package installations, user creation, and chroot command execution.Methods:
mount(): Mounts virtual filesystems into target rootfs.umount(): Safely unmounts all virtual filesystems.install_packages(package_plan, repos): Installs packages into chroot via XBPS.run_command(cmd, check): Executes shell command inside chroot usingchrootorproot.run_reconfigure(): Runs Void 3-passxbps-reconfigure -f <pkg>for system packages.
Module: void_builder.core.stage_manager
StageManager
Role: Manages base system stage tarballs (
void-base-<arch>.tar.xz) for rapid ISO builds.Methods:
resolve_tarball(tarball_arg): Resolves file path, URI (file://), HTTP/HTTPS URL, or automatic candidate lookup (y/auto).extract_tarball(tarball_path, target_root): Unpacks stage seed into target rootfs preserving permissions (tar xpf ... --numeric-owner --xattrs-include='*.*'). Automatically leverages multi-core parallel decompressors (pixz,zstd -T0,pigz) when available.create_stage_tarball(source_root, output_tarball, compression): Packages clean rootfs into compressed stage tarball (.tar.xz,.tar.gz,.tar.zst). Automatically applies multi-threaded compressors (zstd -T0 -3,pixz,pigz).
Module: void_builder.core.iso_engine
ISOEngine
Role: Metaclass and engine registry.
Registry: Maps architecture names to engine implementation classes.
BaseEngine
Role: Abstract base engine providing workspace resolution, manifest generation, and tarball export.
Methods:
setup_workdir(workdir): Resolves and creates workspace paths._generate_manifest_and_checksums(output_path): Computes SHA256, SHA512, MD5 hashes and generatesmanifest.json.export_tarball(output_path): Packs rootfs into.tar.xzcontainer tarball.
VoidEngine(BaseEngine)
Role: Handles PC ISO 9660 hybrid ISO image building (
x86_64,i686,aarch64).Methods:
_create_squashfs(): Invokesmksquashfswith configured compression (xz,zstd,gzip), multi-threaded processor allocation (-processors <N>), and fast block sizing.finalize_isofile(output_path): Assembles ISO usingxorrisowith BIOS El Torito and UEFI GRUB EFI options. Strictly validates xorriso return codes and output media space to prevent corrupted image output.
PlatformEngine(VoidEngine)
Role: Handles Single-Board Computer raw disk images (
rpi-aarch64,pinebookpro,asahi).Methods:
finalize_isofile(output_path): Dynamically calculates required image size, runssfdiskpartitioning, sets up loop device vialosetup, formats VFAT/EXT4 partitions with lazy table initialization, copies rootfs, writes U-Boot / GRUB EFI bootloaders, and compresses raw.imgwithxz.
Module: void_builder.core.customizer
SystemConfigurator
Role: Executes modular, decoupled
SystemActionobjects inside target rootfs.Action Sequence:
RootPasswordAction: Sets root password or locks root account.SSHKeyAction: Injects authorized public SSH keys into/root/.ssh/authorized_keysand/home/<user>/.ssh/authorized_keyswith strict permissions.LocaleAction: Applies hostname, timezone, locale, and keymap.UserAction: Creates live user accounts and assigns groups.ServiceAction: Enables Runit services with conflict suppression (e.g. omitsdhcpcdifNetworkManageris enabled).HookAction: Executes user-defined shell scripts at lifecycle milestones (pre-install,post-install,pre-iso).DracutAction: Generates initramfs with optimized compression.StructuredCopyAction: Copies overlay file trees fromconfigs/custom_files/.
4. Step-by-Step Pipeline Phases
Phase 1 - Initialization & Presets:
BuildOrchestratorparses arguments, applies preset profiles (minimal,developer,gaming, etc.), instantiatesConfigAssembler, and builds masterConfigobject.Phase 2 - Workdir & TmpFS Staging: Tests write permissions on
workdir/<arch>, optionally mounting in-memorytmpfsif--tmpfsis active for maximum I/O throughput.Phase 3 - Toolchain Preparation: Initializes
ToolchainManagerand verifies staticxbpsbinaries.Phase 4 - Chroot Provisioning: Creates
airootfsdirectory and mounts virtual filesystems (/proc,/sys,/dev,/dev/pts,/dev/shm).Phase 5 - Package Installation: Invokes
xbps-install.staticwith target package plan and repository list (or extracts pre-built base stage tarball viaStageManager).Phase 6 - System Customization & Actions:
SystemConfiguratorexecutesSystemActionchain (locale, users, services, SSH keys, root password, hooks, Dracut initramfs).Phase 7 - 3-Pass Reconfiguration: Runs
xbps-reconfigure -ainside chroot.Phase 8 - Bootloaders & Finalization:
For ISO: Generates SYSLINUX/GRUB configs, creates SquashFS (
zstd/xz), runsxorriso.For SBC: Partition image with
sfdisk, format VFAT/EXT4, write U-Boot, compress image.For Tarball: Packs rootfs into
.tar.xz.
Phase 9 - Checksums, Manifests & Benchmarking: Computes SHA256, SHA512, MD5, generates
.manifest.json, safely unmounts filesystems, and prints--benchmarktiming breakdown.